
        <html>
			<head>
			     <title>应用程序逻辑错误总结 - jaffer</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/papers/1418">http://drops.wooyun.org/papers/1418</a></h1>
				
      <p>
        <h2>0x00 引言</h2>

<hr />

<p>所有应用程序都是通过逻辑实现各种丰富多彩的功能的，要实现这些功能，必须掌握大量的技巧并进行周密的安排。但是，有很多情况这些功能逻辑存在缺陷，比如程序员的安全意识，比如考虑问题不周全等。即使是最简单的web应用程序，每个阶段都会执行大量的逻辑操作，这些逻辑操作代表着一个复杂的攻击面，它从没有消失，只是容易被遗忘。</p>

<p>逻辑缺陷的本质就是设计者或开发者在思考问题过程中做出的特殊假设存在明显的或隐晦的错误，简单来说，就是程序员可能这么认为：如果发生A，就一定会出现B，因此执行C。但是他们却忘记了另外一个问题：如果发生X会怎么样？</p>

<p>下面就是来谈谈一些常见的逻辑错误。</p>

<!--more-->

<h2>0x01 欺骗密码找回功能</h2>

<hr />

<p>密码找回功能本意是设计给那些忘记密码的用户，以便他们能够找回自己的密码。</p>

<p>一般的假设都是这样的：首先账号绑定了一个手机或邮箱（以手机为例），然后找回密码，输入自己的账号，然后手机号码（有些甚至这一步都不需要），然后发送验证码（一般是4位或6位纯数字，验证码有限期很长），然后用户填写验证码，验证成功之后，就可以修改账号的密码了。</p>

<p>那么问题逻辑缺陷很明显了，你怎么能只是根据一个验证码就确定是用户本人在修改密码呢？如果是攻击者，完全可以暴力破解验证码，这样，任意用户的密码都是可以重置的。</p>

<p>乌云类似漏洞</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-054068">WooYun: 华为网盘部分用户密码修改</a> </p>

<p>之前的总结文章：<a href="http://drops.wooyun.org/papers/287">密码找回功能可能存在的问题</a></p>

<h2>0x02 规避交易限制</h2>

<hr />

<p>在一些网上交易网站上，开发者一般的设计是这样的：用户购买商品，然后根据价格，得到一个总价，然后根据总价来扣钱。</p>

<p>那么这样的一个逻辑处理不当其实会出现很多问题，首先是，如果用户购买的商品是负数，那么计算的总计就是负数了，这样的话，系统的处理就会反给钱给用户，乌云也爆出过这样的漏洞：</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-050481">WooYun: destoon无限制增加帐号资金</a> </p>

<p>同样的道理，如果价格没有控制好（比如越界），为负数的话，也会出现这样的问题。有时候还不符合逻辑，因为，你的账上金额显示为负数。</p>

<p>乌云类似漏洞：</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-048591">WooYun: UCloud 另一处严重支付逻辑错误 导致可刷余额</a> </p>

<p>之前的总结文章：<a href="http://drops.wooyun.org/papers/345">在线支付逻辑漏洞总结</a></p>

<h2>0x03 越权缺陷</h2>

<hr />

<p>这个就以发帖来说明，一般的假设都是这样的，A发了一篇帖子，这篇帖子的地址是<a href="http://xxxx.com/fatie/A">http://xxxx.com/fatie/A</a>, 然后，B用户发帖，发帖的地址是http://xxxx.com/fatie/B。</p>

<p>那么这样的设计缺陷有可能出现B修改A发布的帖子的问题。攻击者B可以发帖，然后截住数据包，将发帖的地址改成A的地址，这样服务器如果没有其他的检查措施，那么A用户的帖子就会被B用户修改。同样的道理，如果B发布一个有害的帖子，那么在发布的时候，只需要将发布的地址修改成A的，那么就可以嫁祸给A了。</p>

<p>同理，A想要查看自己的信息，比如是这么一个形式：http://xxxx.com/look/A/1234。 这是A的自己的敏感信息位置，那么可能存在的缺陷就是A通过将地址修改成http://xxxx.com/look/B/1234去查看B的敏感信息。</p>

<p>乌云类似漏洞：</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-051497">WooYun: 益云公益广告越权修改漏洞</a> </p>

<p>之前的总结文章：<a href="http://drops.wooyun.org/tips/727">我的越权之道</a></p>

<h2>0x04 cookies和session的问题</h2>

<hr />

<p>一些网站对于用户是否成功登录不是看用户名与密码是否与数据库里面的匹配，而是看cookies是否为空或session是否为true。这样的问题的假设就是开发者认为用户能够登录，那么cookies就不会为空或session就不会为false。但是逻辑缺陷很明显，那么只要能知道用户ID，然后构造一个cookies或让session值为true就可以绕过这样的认证了。</p>

<p>乌云类似漏洞：</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-051424">WooYun: 益云广告平台任意帐号登录</a> </p>

<h2>0x05 顺序执行缺陷（强制浏览）</h2>

<hr />

<p>有些网站，可能会有这样的功能：</p>

<pre><code>首先，进行A过程，
其次，进行B过程，
再次，进行C过程，
最后，进行D过程。 
</code></pre>

<p>开发者的意图是，用户必须进行了A才能进行B，进行了B才能进行C，进行了C才能进行D，也认为用户会按照预定的顺序执行每一个步骤，这是因为在浏览器中导航是这么处理的。</p>

<p>开发者的假设存在缺陷。用户控制着他们给应用程序发送的每一个请求，因此能够按照任何顺序进行访问。于是，可能，用户就从B直接进入了D过程，就绕过了C。如果C是支付过程，那么用户就绕过了支付过程而买到了一件商品。如果C是验证过程，就会绕过验证直接进入网站程序了。</p>

<p>乌云类似漏洞：</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-050488">WooYun: 中国教师资格网绕过验证(可遍历全国教师身份信息)</a> </p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-047677">WooYun: 万达某分站逻辑错误可绕过支付直接获得取票密码</a> </p>

<h2>0x06 时间刷新缺陷</h2>

<hr />

<p>这个缺陷我想主要是针对的12306吧。</p>

<p>网站的假设是每隔5s，票会刷新一次。</p>

<p>但是这个时间确实在本地设置的间隔。于是，在控制台就可以将这个时间的关联变量重新设置成1s或者更小，这样刷新的时间就会大幅度缩短。</p>

<p>乌云类似漏洞：</p>

<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-048391">WooYun: 12306自动刷票时间可更改漏洞</a> </p>

<h2>0x07 避免逻辑缺陷一些建议</h2>

<hr />

<p>逻辑缺陷给应用程序带来的危害是巨大的。我进行了一个简单的统计，对于BAT3个公司，逻辑缺陷（这里我将逻辑缺陷、权限绕过的比例加在了一起）的比例分别是：百度15%，在所有漏洞中占的比例排第二，阿里巴巴32%，在所有漏洞中排名第一，腾讯27%，与XSS漏洞并列第一。从这3个公司可以看出，逻辑缺陷或逻辑错误的危害是相当大的。</p>

<p>那么在实践中该如何降低逻辑缺陷造成的风险呢？</p>

<pre><code>1、应用程序的设计信息要清楚，详细的记录在文档中，以便他人了解（主要是安全检查人员） 
2、始终记住用户可以控制请求的每一个方面，他们可以按照任意顺序访问多阶段功能，可以提交畸形数据，可以忽略某些参数，可以伪造某些参数，可以修改某些参数。因此在设计的时候一定尽可能要面面俱到。 
3、在安全代码审计的过程中，从各个角度考虑两个因素：应用程序如何处理用户的反常操作和输入的，不同代码组件与应用程序功能之间的相互依赖操作可能造成不利影响。 
4、在安全代码审计过程中，考虑设计过程中做的每一个假设，并想象假设被违背的每种情况，尤其注意用户可以完全控制的假设条件。
</code></pre>

<h2>0x08 结束语</h2>

<hr />

<p>逻辑缺陷是一个非常常见的问题，因为对于一个设计者，不可能面面俱到，总会有疏漏。那么对于渗透测试员来说就必须从不同的角度考虑问题了。尤其是从异常考虑问题，从而发现应用程序是否是正确处理了异常。</p>

<p>除了基本的测试，在探查逻辑缺陷面临的最大的挑战就是，如何深入了解开发者的思维。需要了解他们想要打到什么目的，可能会做什么假设，可能采取哪些捷径，可能犯下什么错误。想想一个项目最后期限到了，开发人员为了完成任务，就会不顾安全。然后就会很容易犯下错误。我们想的就是如何利用这些错误了。</p>

<p> </p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          